###############################################################
# Compiler options
CXX := i686-w64-mingw32-g++
WINDRES := i686-w64-mingw32-windres

CLIB = -lws2_32
CINCL = -Ifreeglut/include -Iglut_render -Iosc-control -Iesp301-control

CPPFLAGS = -O2 -D FREEGLUT_STATIC $(CINCL)
LDFLAGS = -static-libgcc -static-libstdc++

# Search path
VPATH:=icon esp301-control osc-control \
	freeglut/lib freeglut/include/GL glut_render \
	/usr/i686-w64-mingw32/lib

###############################################################
all:installer apps

installer:installer.exe

apps: osc-radar.exe osc-record.exe

.PHONY: doc clean
doc: Doxyfile
	rm -rf doc
	doxygen

installer.exe:installer.nsi apps
	makensis $<

###############################################################
# Core executable

osc-radar.exe: LDFLAGS+=-Lfreeglut/lib -Wl,--subsystem,windows

osc-radar.exe:%.exe:%.o %.res glut_render.o osc-control.o socket_client.o \
		$(CLIB) libfreeglut_static.a -lglu32 -lgdi32 -lwinmm -lopengl32
	$(CXX) $(LDFLAGS) -o $@ $^
	upx -q $@

osc-radar.o:osc-radar.cpp osc-control.hpp glut_render.hpp freeglut.h

osc-record.exe:%.exe: %.o %.res socket_client.o osc-control.o \
		esp301-control.o serialib.o $(CLIB)
	$(CXX) $(LDFLAGS) -o $@ $^
	upx -q $@

osc-record.o:osc-record.cpp osc-control/osc-control.hpp esp301-control/esp301-control.h

###############################################################
# EXE icon
osc-radar.res osc-record.res:%.res:%.rc %.ico
	$(WINDRES) $< -O coff -o $@


###############################################################
# OpenGL interface
glut_render.o:%.o:%.cpp %.hpp osc-control.hpp

###############################################################
# Oscilloscope interface
osc-control.o socket_client.o:%.o: %.cpp %.hpp socket_client.hpp

###############################################################
# ESP301 interface
esp301-control.o serialib.o: %.o: %.cpp %.h serialib.h

###############################################################
.PHONY:clean

clean:
	rm -f *.o *.res
